diff --git a/system/codeigniter/CodeIgniter.php b/system/codeigniter/CodeIgniter.php
index a237e8a..63ae458 100644
--- a/system/codeigniter/CodeIgniter.php
+++ b/system/codeigniter/CodeIgniter.php
@@ -173,32 +173,15 @@
 // Mark a start point so we can benchmark the controller
 $BM->mark('controller_execution_time_( '.$class.' / '.$method.' )_start');
 
+// Instantiate the Controller
 $CI = new $class();
 
+// Is this a scaffolding request?
 if ($RTR->scaffolding_request === TRUE)
 {
 	if ($EXT->_call_hook('scaffolding_override') === FALSE)
 	{
-		if ($CI->_ci_scaffolding === FALSE OR $CI->_ci_scaff_table === FALSE)
-		{
-			show_404('Scaffolding unavailable');
-		}
-		
-		if ( ! class_exists('Scaffolding'))
-		{			
-			if ( ! in_array($CI->uri->segment(3), array('add', 'insert', 'edit', 'update', 'view', 'delete', 'do_delete'), TRUE))
-			{
-				$method = 'view';
-			}
-			else
-			{
-				$method = $CI->uri->segment(3);
-			}
-			
-			require_once(BASEPATH.'scaffolding/Scaffolding'.EXT);
-			$scaff = new Scaffolding($CI->_ci_scaff_table);
-			$scaff->$method();
-		}
+		$CI->_ci_scaffolding();
 	}
 }
 else
@@ -210,6 +193,7 @@
 	 */
 	$EXT->_call_hook('post_controller_constructor');
 	
+	// Is there a "remap" function?
 	if (method_exists($CI, '_remap'))
 	{
 		$CI->_remap($method);
diff --git a/system/database/DB_cache.php b/system/database/DB_cache.php
index bb2b47b..081b565 100644
--- a/system/database/DB_cache.php
+++ b/system/database/DB_cache.php
@@ -24,7 +24,7 @@
  */
 class CI_DB_Cache {
 
-	var $obj;
+	var $CI;
 
 	/**
 	 * Constructor
@@ -34,10 +34,10 @@
 	 */	
 	function CI_DB_Cache()
 	{
-		// Assign the main CI object to $this->obj
+		// Assign the main CI object to $this->CI
 		// and load the file helper since we use it a lot
-		$this->obj =& get_instance();
-		$this->obj->load->helper('file');	
+		$this->CI =& get_instance();
+		$this->CI->load->helper('file');	
 	}
 
 	// --------------------------------------------------------------------
@@ -53,12 +53,12 @@
 	{
 		if ($path == '')
 		{
-			if ($this->obj->db->cachedir == '')
+			if ($this->CI->db->cachedir == '')
 			{
-				return $this->obj->db->cache_off();
+				return $this->CI->db->cache_off();
 			}
 		
-			$path = $this->obj->db->cachedir;
+			$path = $this->CI->db->cachedir;
 		}
 	
 		// Add a trailing slash to the path if needed
@@ -66,16 +66,16 @@
 	
 		if ( ! is_dir($path) OR ! is_writable($path))
 		{
-			if ($this->obj->db->db_debug)
+			if ($this->CI->db->db_debug)
 			{
-				return $this->obj->db->display_error('db_invalid_cache_path');
+				return $this->CI->db->display_error('db_invalid_cache_path');
 			}
 			
 			// If the path is wrong we'll turn off caching
-			return $this->obj->db->cache_off();
+			return $this->CI->db->cache_off();
 		}
 		
-		$this->obj->db->cachedir = $path;
+		$this->CI->db->cachedir = $path;
 		return TRUE;
 	}
 	
@@ -94,15 +94,15 @@
 	{
 		if ( ! $this->check_path())
 		{
-			return $this->obj->db->cache_off();
+			return $this->CI->db->cache_off();
 		}
 	
-		$uri  = ($this->obj->uri->segment(1) == FALSE) ? 'default.'	: $this->obj->uri->segment(1).'.';
-		$uri .= ($this->obj->uri->segment(2) == FALSE) ? 'index'	: $this->obj->uri->segment(2);
+		$uri  = ($this->CI->uri->segment(1) == FALSE) ? 'default.'	: $this->CI->uri->segment(1).'.';
+		$uri .= ($this->CI->uri->segment(2) == FALSE) ? 'index'		: $this->CI->uri->segment(2);
 		
 		$filepath = $uri.'/'.md5($sql);
 		
-		if (FALSE === ($cachedata = read_file($this->obj->db->cachedir.$filepath)))
+		if (FALSE === ($cachedata = read_file($this->CI->db->cachedir.$filepath)))
 		{	
 			return FALSE;
 		}
@@ -122,13 +122,13 @@
 	{
 		if ( ! $this->check_path())
 		{
-			return $this->obj->db->cache_off();
+			return $this->CI->db->cache_off();
 		}
 
-		$uri  = ($this->obj->uri->segment(1) == FALSE) ? 'default.'	: $this->obj->uri->segment(1).'.';
-		$uri .= ($this->obj->uri->segment(2) == FALSE) ? 'index'	: $this->obj->uri->segment(2);
+		$uri  = ($this->CI->uri->segment(1) == FALSE) ? 'default.'	: $this->CI->uri->segment(1).'.';
+		$uri .= ($this->CI->uri->segment(2) == FALSE) ? 'index'		: $this->CI->uri->segment(2);
 		
-		$dir_path = $this->obj->db->cachedir.$uri.'/';
+		$dir_path = $this->CI->db->cachedir.$uri.'/';
 		
 		$filename = md5($sql);
 	
@@ -163,15 +163,15 @@
 	{	
 		if ($segment_one == '')
 		{
-			$segment_one  = ($this->obj->uri->segment(1) == FALSE) ? 'default' : $this->obj->uri->segment(2);
+			$segment_one  = ($this->CI->uri->segment(1) == FALSE) ? 'default' : $this->CI->uri->segment(2);
 		}
 		
 		if ($segment_two == '')
 		{
-			$segment_two = ($this->obj->uri->segment(2) == FALSE) ? 'index' : $this->obj->uri->segment(2);
+			$segment_two = ($this->CI->uri->segment(2) == FALSE) ? 'index' : $this->CI->uri->segment(2);
 		}
 		
-		$dir_path = $this->obj->db->cachedir.md5($segment_one.'.'.$segment_two).'/';
+		$dir_path = $this->CI->db->cachedir.md5($segment_one.'.'.$segment_two).'/';
 		
 		delete_files($dir_path, TRUE);
 	}
@@ -186,7 +186,7 @@
 	 */
 	function delete_all()
 	{
-		delete_files($this->obj->db->cachedir, TRUE);
+		delete_files($this->CI->db->cachedir, TRUE);
 	}
 
 }
diff --git a/system/libraries/Calendar.php b/system/libraries/Calendar.php
index 8cf1517..3cbbbfe 100644
--- a/system/libraries/Calendar.php
+++ b/system/libraries/Calendar.php
@@ -28,8 +28,8 @@
  */ 
 class CI_Calendar {
 
+	var $CI;
 	var $lang;
-	var $obj;
 	var $local_time;
 	var $template		= '';
 	var $start_day		= 'sunday';
@@ -47,10 +47,10 @@
 	 */
 	function CI_Calendar()
 	{		
-		$this->obj =& get_instance();
-		if ( ! in_array('calendar_lang'.EXT, $this->obj->lang->is_loaded, TRUE))
+		$this->CI =& get_instance();
+		if ( ! in_array('calendar_lang'.EXT, $this->CI->lang->is_loaded, TRUE))
 		{
-			$this->obj->lang->load('calendar');
+			$this->CI->lang->load('calendar');
 		}
 
 		$this->local_time = time();
@@ -268,12 +268,12 @@
 		
 		$month = $month_names[$month];
 		
-		if ($this->obj->lang->line($month) === FALSE)
+		if ($this->CI->lang->line($month) === FALSE)
 		{
 			return ucfirst(str_replace('cal_', '', $month));
 		}
 
-		return $this->obj->lang->line($month);
+		return $this->CI->lang->line($month);
 	}
 	// END get_month_name()
 	
@@ -310,7 +310,7 @@
 		$days = array();
 		foreach ($day_names as $val)
 		{			
-			$days[] = ($this->obj->lang->line('cal_'.$val) === FALSE) ? ucfirst($val) : $this->obj->lang->line('cal_'.$val);
+			$days[] = ($this->CI->lang->line('cal_'.$val) === FALSE) ? ucfirst($val) : $this->CI->lang->line('cal_'.$val);
 		}
 	
 		return $days;
diff --git a/system/libraries/Controller.php b/system/libraries/Controller.php
index 88b49a9..58bec84 100644
--- a/system/libraries/Controller.php
+++ b/system/libraries/Controller.php
@@ -40,9 +40,7 @@
 	function Controller()
 	{	
 		parent::CI_Base();
-		
 		$this->_ci_initialize();
-		
 		log_message('debug', "Controller Class Initialized");
 	}
   
@@ -62,22 +60,28 @@
 		// Assign all the class objects that were instantiated by the
 		// front controller to local class variables so that CI can be 
 		// run as one big super object.
-		foreach (array('Config', 'Input', 'Benchmark', 'URI', 'Output') as $val)
+		$classes = array(
+							'config'	=> 'Config', 
+							'input'		=> 'Input', 
+							'benchmark'	=> 'Benchmark', 
+							'uri'		=> 'URI', 
+							'output'	=> 'Output',
+							'lang'		=> 'Language'
+							);
+		
+		foreach ($classes as $var => $class)
 		{
-			$class = strtolower($val);
-			$this->$class =& _load_class($val);
+			$this->$var =& _load_class($class);
 		}
 		
-		$this->lang	=& _load_class('Language');
-	
-		// In PHP 4 the Controller class is a child of CI_Loader.
-		// In PHP 5 we run it as its own class.
+		
+		// In PHP 5 the Controller class is run as a discreet 
+		// class.  In PHP 4 it extends the Controller
 		if (floor(phpversion()) >= 5)
 		{
 			$this->load = new CI_Loader();
 		}
 
-		
 		// Load everything specified in the autoload.php file
 		$this->load->_ci_autoloader();
 
@@ -92,6 +96,28 @@
 		}	
 	}
     
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Run Scaffolding
+	 *
+	 * @access	private
+	 * @return	voikd
+	 */	
+    function _ci_scaffolding()
+    {
+		if ($this->_ci_scaffolding === FALSE OR $this->_ci_scaff_table === FALSE)
+		{
+			show_404('Scaffolding unavailable');
+		}
+		
+		$method = ( ! in_array($this->uri->segment(3), array('add', 'insert', 'edit', 'update', 'view', 'delete', 'do_delete'), TRUE)) ? 'view' : $this->uri->segment(3);
+		
+		require_once(BASEPATH.'scaffolding/Scaffolding'.EXT);
+		$scaff = new Scaffolding($this->_ci_scaff_table);
+		$scaff->$method();
+    }
+    
 
 }
 // END _Controller class
diff --git a/system/libraries/Loader.php b/system/libraries/Loader.php
index f823d95..90dc0f1 100644
--- a/system/libraries/Loader.php
+++ b/system/libraries/Loader.php
@@ -31,12 +31,11 @@
 	var $CI;
 	var $ob_level;
 	var $cached_vars	= array();
+	var $models			= array();
 	var $helpers		= array();
 	var $plugins		= array();
 	var $scripts		= array();
-	var $languages		= array();
 	var $view_path		= '';
-	var $models			= array();
 
 	/**
 	 * Constructor
diff --git a/system/libraries/Profiler.php b/system/libraries/Profiler.php
index 6142267..d91f231 100644
--- a/system/libraries/Profiler.php
+++ b/system/libraries/Profiler.php
@@ -32,12 +32,12 @@
  */
 class CI_Profiler {
 
-	var $obj;
+	var $CI;
  	
  	function CI_Profiler()
  	{
- 		$this->obj =& get_instance();
- 		$this->obj->load->language('profiler');
+ 		$this->CI =& get_instance();
+ 		$this->CI->load->language('profiler');
  	}
  	
 	// --------------------------------------------------------------------
@@ -56,15 +56,15 @@
  	function _compile_benchmarks()
  	{
   		$profile = array();
- 		foreach ($this->obj->benchmark->marker as $key => $val)
+ 		foreach ($this->CI->benchmark->marker as $key => $val)
  		{
  			// We match the "end" marker so that the list ends
  			// up in the order that it was defined
  			if (preg_match("/(.+?)_end/i", $key, $match))
  			{ 			
- 				if (isset($this->obj->benchmark->marker[$match[1].'_end']) AND isset($this->obj->benchmark->marker[$match[1].'_start']))
+ 				if (isset($this->CI->benchmark->marker[$match[1].'_end']) AND isset($this->CI->benchmark->marker[$match[1].'_start']))
  				{
- 					$profile[$match[1]] = $this->obj->benchmark->elapsed_time($match[1].'_start', $key);
+ 					$profile[$match[1]] = $this->CI->benchmark->elapsed_time($match[1].'_start', $key);
  				}
  			}
  		}
@@ -76,7 +76,7 @@
 		$output  = "\n\n";
 		$output .= '<fieldset style="border:1px solid #990000;padding:6px 10px 10px 10px;margin:0 0 20px 0;background-color:#eee">';
 		$output .= "\n";
-		$output .= '<legend style="color:#990000;">&nbsp;&nbsp;'.$this->obj->lang->line('profiler_benchmarks').'&nbsp;&nbsp;</legend>';
+		$output .= '<legend style="color:#990000;">&nbsp;&nbsp;'.$this->CI->lang->line('profiler_benchmarks').'&nbsp;&nbsp;</legend>';
 		$output .= "\n";			
 		$output .= "\n\n<table cellpadding='4' cellspacing='1' border='0' width='100%'>\n";
 		
@@ -100,22 +100,22 @@
 		$output  = "\n\n";
 		$output .= '<fieldset style="border:1px solid #0000FF;padding:6px 10px 10px 10px;margin:20px 0 20px 0;background-color:#eee">';
 		$output .= "\n";
-		$output .= '<legend style="color:#0000FF;">&nbsp;&nbsp;'.$this->obj->lang->line('profiler_queries').'&nbsp;&nbsp;</legend>';
+		$output .= '<legend style="color:#0000FF;">&nbsp;&nbsp;'.$this->CI->lang->line('profiler_queries').'&nbsp;&nbsp;</legend>';
 		$output .= "\n";		
 		
 		if ( ! class_exists('CI_DB_driver'))
 		{
-			$output .= "<div style='color:#0000FF;font-weight:normal;padding:4px 0 0 0;'>".$this->obj->lang->line('profiler_no_db')."</div>";
+			$output .= "<div style='color:#0000FF;font-weight:normal;padding:4px 0 0 0;'>".$this->CI->lang->line('profiler_no_db')."</div>";
 		}
 		else
 		{
-			if (count($this->obj->db->queries) == 0)
+			if (count($this->CI->db->queries) == 0)
 			{
-				$output .= "<div style='color:#0000FF;font-weight:normal;padding:4px 0 4px 0;'>".$this->obj->lang->line('profiler_no_queries')."</div>";
+				$output .= "<div style='color:#0000FF;font-weight:normal;padding:4px 0 4px 0;'>".$this->CI->lang->line('profiler_no_queries')."</div>";
 			}
 			else
 			{
-				foreach ($this->obj->db->queries as $val)
+				foreach ($this->CI->db->queries as $val)
 				{
 					$output .= '<div style="padding:3px;margin:12px 0 12px 0;background-color:#ddd;color:#000">';
 					$output .= $val;
@@ -136,12 +136,12 @@
 		$output  = "\n\n";
 		$output .= '<fieldset style="border:1px solid #009900;padding:6px 10px 10px 10px;margin:20px 0 20px 0;background-color:#eee">';
 		$output .= "\n";
-		$output .= '<legend style="color:#009900;">&nbsp;&nbsp;'.$this->obj->lang->line('profiler_post_data').'&nbsp;&nbsp;</legend>';
+		$output .= '<legend style="color:#009900;">&nbsp;&nbsp;'.$this->CI->lang->line('profiler_post_data').'&nbsp;&nbsp;</legend>';
 		$output .= "\n";
 				
 		if (count($_POST) == 0)
 		{
-			$output .= "<div style='color:#009900;font-weight:normal;padding:4px 0 4px 0'>".$this->obj->lang->line('profiler_no_post')."</div>";
+			$output .= "<div style='color:#009900;font-weight:normal;padding:4px 0 4px 0'>".$this->CI->lang->line('profiler_no_post')."</div>";
 		}
 		else
 		{
diff --git a/system/libraries/Session.php b/system/libraries/Session.php
index 28e469d..16f373f 100644
--- a/system/libraries/Session.php
+++ b/system/libraries/Session.php
@@ -26,6 +26,7 @@
  */
 class CI_Session {
 
+    var $CI;
 	var $now;
 	var $encryption		= TRUE;
 	var $use_database	= FALSE;
@@ -34,7 +35,7 @@
     var $sess_cookie	= 'ci_session';
 	var $userdata		= array();
     var $gc_probability	= 5;
-    var $object;
+
     
 
 	/**
@@ -45,7 +46,7 @@
 	 */		
 	function CI_Session()
 	{
-		$this->object =& get_instance();
+		$this->CI =& get_instance();
 
 		log_message('debug', "Session Class Initialized");
 		$this->sess_run();
@@ -73,7 +74,7 @@
 		 * "last_visit" times based on each user's locale.
 		 *
 		 */
-		if (strtolower($this->object->config->item('time_reference')) == 'gmt')
+		if (strtolower($this->CI->config->item('time_reference')) == 'gmt')
 		{
 			$now = time();
 			$this->now = mktime(gmdate("H", $now), gmdate("i", $now), gmdate("s", $now), gmdate("m", $now), gmdate("d", $now), gmdate("Y", $now));   
@@ -97,13 +98,13 @@
 		 * two years from now.
 		 *
 		 */
-		$expiration = $this->object->config->item('sess_expiration');
+		$expiration = $this->CI->config->item('sess_expiration');
 		
 		if (is_numeric($expiration))
 		{
 			if ($expiration > 0)
 			{
-				$this->sess_length = $this->object->config->item('sess_expiration');
+				$this->sess_length = $this->CI->config->item('sess_expiration');
 			}
 			else
 			{
@@ -112,25 +113,25 @@
 		}
 		
 		// Do we need encryption?
-		$this->encryption = $this->object->config->item('sess_encrypt_cookie');
+		$this->encryption = $this->CI->config->item('sess_encrypt_cookie');
 		
 		if ($this->encryption == TRUE)	
 		{
-			$this->object->load->library('encrypt');
+			$this->CI->load->library('encrypt');
 		}		
 
 		// Are we using a database?
-		if ($this->object->config->item('sess_use_database') === TRUE AND $this->object->config->item('sess_table_name') != '')
+		if ($this->CI->config->item('sess_use_database') === TRUE AND $this->CI->config->item('sess_table_name') != '')
 		{
 			$this->use_database = TRUE;
-			$this->session_table = $this->object->config->item('sess_table_name');
-			$this->object->load->database();
+			$this->session_table = $this->CI->config->item('sess_table_name');
+			$this->CI->load->database();
 		}
 		
 		// Set the cookie name
-		if ($this->object->config->item('sess_cookie_name') != FALSE)
+		if ($this->CI->config->item('sess_cookie_name') != FALSE)
 		{
-			$this->sess_cookie = $this->object->config->item('cookie_prefix').$this->object->config->item('sess_cookie_name');
+			$this->sess_cookie = $this->CI->config->item('cookie_prefix').$this->CI->config->item('sess_cookie_name');
 		}
 	
 		/*
@@ -172,7 +173,7 @@
 	function sess_read()
 	{	
 		// Fetch the cookie
-		$session = $this->object->input->cookie($this->sess_cookie);
+		$session = $this->CI->input->cookie($this->sess_cookie);
 		
 		if ($session === FALSE)
 		{
@@ -183,7 +184,7 @@
 		// Decrypt and unserialize the data
 		if ($this->encryption == TRUE)
 		{
-			$session = $this->object->encrypt->decode($session);
+			$session = $this->CI->encrypt->decode($session);
 		}
 
 		$session = @unserialize($this->strip_slashes($session));
@@ -202,14 +203,14 @@
 		}
 
 		// Does the IP Match?
-		if ($this->object->config->item('sess_match_ip') == TRUE AND $session['ip_address'] != $this->object->input->ip_address())
+		if ($this->CI->config->item('sess_match_ip') == TRUE AND $session['ip_address'] != $this->CI->input->ip_address())
 		{
 			$this->sess_destroy();
 			return FALSE;
 		}
 		
 		// Does the User Agent Match?
-		if ($this->object->config->item('sess_match_useragent') == TRUE AND $session['user_agent'] != substr($this->object->input->user_agent(), 0, 50))
+		if ($this->CI->config->item('sess_match_useragent') == TRUE AND $session['user_agent'] != substr($this->CI->input->user_agent(), 0, 50))
 		{
 			$this->sess_destroy();
 			return FALSE;
@@ -218,19 +219,19 @@
 		// Is there a corresponding session in the DB?
 		if ($this->use_database === TRUE)
 		{
-			$this->object->db->where('session_id', $session['session_id']);
+			$this->CI->db->where('session_id', $session['session_id']);
 					
-			if ($this->object->config->item('sess_match_ip') == TRUE)
+			if ($this->CI->config->item('sess_match_ip') == TRUE)
 			{
-				$this->object->db->where('ip_address', $session['ip_address']);
+				$this->CI->db->where('ip_address', $session['ip_address']);
 			}
 
-			if ($this->object->config->item('sess_match_useragent') == TRUE)
+			if ($this->CI->config->item('sess_match_useragent') == TRUE)
 			{
-				$this->object->db->where('user_agent', $session['user_agent']);
+				$this->CI->db->where('user_agent', $session['user_agent']);
 			}
 			
-			$query = $this->object->db->get($this->session_table);
+			$query = $this->CI->db->get($this->session_table);
 
 			if ($query->num_rows() == 0)
 			{
@@ -242,8 +243,8 @@
 				$row = $query->row();
 				if (($row->last_activity + $this->sess_length) < $this->now) 
 				{
-					$this->object->db->where('session_id', $session['session_id']);
-					$this->object->db->delete($this->session_table);
+					$this->CI->db->where('session_id', $session['session_id']);
+					$this->CI->db->delete($this->session_table);
 					$this->sess_destroy();
 					return FALSE;
 				}
@@ -272,15 +273,15 @@
 		
 		if ($this->encryption == TRUE)
 		{
-			$cookie_data = $this->object->encrypt->encode($cookie_data);
+			$cookie_data = $this->CI->encrypt->encode($cookie_data);
 		}
 
 		setcookie(
 					$this->sess_cookie, 
 					$cookie_data, 
 					$this->sess_length + $this->now, 
-					$this->object->config->item('cookie_path'), 
-					$this->object->config->item('cookie_domain'), 
+					$this->CI->config->item('cookie_path'), 
+					$this->CI->config->item('cookie_domain'), 
 					0
 				);
 	}
@@ -304,8 +305,8 @@
 	
 		$this->userdata = array(
 							'session_id' 	=> md5(uniqid($sessid, TRUE)),
-							'ip_address' 	=> $this->object->input->ip_address(),
-							'user_agent' 	=> substr($this->object->input->user_agent(), 0, 50),
+							'ip_address' 	=> $this->CI->input->ip_address(),
+							'user_agent' 	=> substr($this->CI->input->user_agent(), 0, 50),
 							'last_activity'	=> $this->now
 							);
 		
@@ -313,7 +314,7 @@
 		// Save the session in the DB if needed
 		if ($this->use_database === TRUE)
 		{
-			$this->object->db->query($this->object->db->insert_string($this->session_table, $this->userdata));
+			$this->CI->db->query($this->CI->db->insert_string($this->session_table, $this->userdata));
 		}
 			
 		// Write the cookie
@@ -342,7 +343,7 @@
 		// Update the session in the DB if needed
 		if ($this->use_database === TRUE)
 		{		
-			$this->object->db->query($this->object->db->update_string($this->session_table, array('last_activity' => $this->now), array('session_id' => $this->userdata['session_id'])));
+			$this->CI->db->query($this->CI->db->update_string($this->session_table, array('last_activity' => $this->now), array('session_id' => $this->userdata['session_id'])));
 		}
 		
 		// Write the cookie
@@ -364,8 +365,8 @@
 					$this->sess_cookie, 
 					addslashes(serialize(array())), 
 					($this->now - 31500000), 
-					$this->object->config->item('cookie_path'), 
-					$this->object->config->item('cookie_domain'), 
+					$this->CI->config->item('cookie_path'), 
+					$this->CI->config->item('cookie_domain'), 
 					0
 				);
 	}
@@ -389,8 +390,8 @@
 		{  
 			$expire = $this->now - $this->sess_length;
 			
-			$this->object->db->where("last_activity < {$expire}");
-			$this->object->db->delete($this->session_table);
+			$this->CI->db->where("last_activity < {$expire}");
+			$this->CI->db->delete($this->session_table);
 
 			log_message('debug', 'Session garbage collection performed.');
 		}    
diff --git a/system/libraries/Validation.php b/system/libraries/Validation.php
index ff59708..5322be0 100644
--- a/system/libraries/Validation.php
+++ b/system/libraries/Validation.php
@@ -26,6 +26,7 @@
  */
 class CI_Validation {
 	
+	var $CI;
 	var $error_string		= '';
 	var $_error_array		= array();
 	var $_rules				= array();
@@ -35,7 +36,7 @@
 	var $_safe_form_data 	= FALSE;
 	var $_error_prefix		= '<p>';
 	var $_error_suffix		= '</p>';
-	var $obj;
+
 	
 
 	/**
@@ -44,7 +45,7 @@
 	 */	
 	function CI_Validation()
 	{	
-		$this->obj =& get_instance();
+		$this->CI =& get_instance();
 		log_message('debug', "Validation Class Initialized");
 	}
 	
@@ -185,7 +186,7 @@
 		}
 	
 		// Load the language file containing error messages
-		$this->obj->lang->load('validation');
+		$this->CI->lang->load('validation');
 							
 		// Cycle through the rules and test for errors
 		foreach ($this->_rules as $field => $rules)
@@ -217,7 +218,7 @@
 				{
 					if ( ! isset($this->_error_messages['isset'])) 
 					{
-						if (FALSE === ($line = $this->obj->lang->line('isset')))
+						if (FALSE === ($line = $this->CI->lang->line('isset')))
 						{
 							$line = 'The field was not set';
 						}							
@@ -267,12 +268,12 @@
 				// Call the function that corresponds to the rule
 				if ($callback === TRUE)
 				{
-					if ( ! method_exists($this->obj, $rule))
+					if ( ! method_exists($this->CI, $rule))
 					{ 		
 						continue;
 					}
 					
-					$result = $this->obj->$rule($_POST[$field], $param);	
+					$result = $this->CI->$rule($_POST[$field], $param);	
 					
 					// If the field isn't required and we just processed a callback we'll move on...
 					if ( ! in_array('required', $ex, TRUE) AND $result !== FALSE)
@@ -309,7 +310,7 @@
 				{
 					if ( ! isset($this->_error_messages[$rule])) 
 					{
-						if (FALSE === ($line = $this->obj->lang->line($rule)))
+						if (FALSE === ($line = $this->CI->lang->line($rule)))
 						{
 							$line = 'Unable to access an error message corresponding to your field name.';
 						}						
@@ -698,7 +699,7 @@
 	 */	
 	function xss_clean($str)
 	{
-		$_POST[$this->_current_field] = $this->obj->input->xss_clean($str);
+		$_POST[$this->_current_field] = $this->CI->input->xss_clean($str);
 	}
 	
 	// --------------------------------------------------------------------
diff --git a/system/scaffolding/Scaffolding.php b/system/scaffolding/Scaffolding.php
index 9059ec1..c046d22 100644
--- a/system/scaffolding/Scaffolding.php
+++ b/system/scaffolding/Scaffolding.php
@@ -27,25 +27,25 @@
  */
 class Scaffolding {
 
+	var $CI;
 	var $current_table;
 	var $base_url = '';
 	var $lang = array();
 
 	function Scaffolding($db_table)
 	{
-		$obj =& get_instance();
-		foreach (get_object_vars($obj) as $key => $var)
-		{
-			if (is_object($var))
-			{
-				$this->$key =& $obj->$key;
-			}
-		}
+		$this->CI =& get_instance();
+		
+		$this->CI->load->database("", FALSE, TRUE);			
+		$this->CI->load->library('pagination');
+		
+		// Turn off caching
+		$this->CI->db->cache_off();
 				
 		/**
 		 * Set the current table name
 		 * This is done when initializing scaffolding:
-		 * $this->_ci_init_scaffolding('table_name')
+		 * $this->load->scaffolding('table_name')
 		 *
 		 */
 		$this->current_table = $db_table;
@@ -55,28 +55,29 @@
 		 * We'll manually override the "view" path so that
 		 * the load->view function knows where to look.
 		 */
-		$this->load->_ci_set_view_path(BASEPATH.'scaffolding/views/');
+		 
+		$this->CI->load->view_path = BASEPATH.'scaffolding/views/';
 
 		// Set the base URL
-		$this->base_url = $this->config->site_url().'/'.$this->uri->segment(1).$this->uri->slash_segment(2, 'both');
-		$this->base_uri = $this->uri->segment(1).$this->uri->slash_segment(2, 'leading');
+		$this->base_url = $this->CI->config->site_url().'/'.$this->CI->uri->segment(1).$this->CI->uri->slash_segment(2, 'both');
+		$this->base_uri = $this->CI->uri->segment(1).$this->CI->uri->slash_segment(2, 'leading');
 
 		// Set a few globals
 		$data = array(
-						'image_url'	=> $this->config->system_url().'scaffolding/images/',
+						'image_url'	=> $this->CI->config->system_url().'scaffolding/images/',
 						'base_uri'  => $this->base_uri,
 						'base_url'	=> $this->base_url,
 						'title'		=> $this->current_table
 					);
 		
-		$this->load->vars($data);
+		$this->CI->load->vars($data);
 		
 		// Load the language file and create variables
-		$this->lang = $this->load->language('scaffolding', '', TRUE);		
-		$this->load->vars($this->lang);
+		$this->lang = $this->CI->load->language('scaffolding', '', TRUE);		
+		$this->CI->load->vars($this->lang);
 				
 		//  Load the helper files we plan to use
-		$this->load->helper(array('url', 'form'));
+		$this->CI->load->helper(array('url', 'form'));
 		
 				
 		log_message('debug', 'Scaffolding Class Initialized');
@@ -97,11 +98,11 @@
 	{	
 		$data = array(
 						'title'	=>  ( ! isset($this->lang['scaff_add'])) ? 'Add Data' : $this->lang['scaff_add'],
-						'fields' => $this->db->field_data($this->current_table),
+						'fields' => $this->CI->db->field_data($this->current_table),
 						'action' => $this->base_uri.'/insert'
 					);
 	
-		$this->load->view('add', $data);
+		$this->CI->load->view('add', $data);
 	}
 	
 	// --------------------------------------------------------------------
@@ -114,7 +115,7 @@
 	 */
 	function insert()
 	{		
-		if ($this->db->insert($this->current_table, $_POST) === FALSE)
+		if ($this->CI->db->insert($this->current_table, $_POST) === FALSE)
 		{
 			$this->add();
 		}
@@ -138,28 +139,28 @@
 	function view()
 	{
 		// Fetch the total number of DB rows
-		$total_rows = $this->db->count_all($this->current_table);
+		$total_rows = $this->CI->db->count_all($this->current_table);
 		
 		if ($total_rows < 1)
 		{
-			return $this->load->view('no_data');
+			return $this->CI->load->view('no_data');
 		}
 		
 		// Set the query limit/offset
 		$per_page = 20;
-		$offset = $this->uri->segment(4, 0);
+		$offset = $this->CI->uri->segment(4, 0);
 		
 		// Run the query
-		$query = $this->db->get($this->current_table, $per_page, $offset);
+		$query = $this->CI->db->get($this->current_table, $per_page, $offset);
 
 		// Now let's get the field names				
-		$fields = $this->db->field_names($this->current_table);
+		$fields = $this->CI->db->field_names($this->current_table);
 		
 		// We assume that the column in the first position is the primary field.
 		$primary = current($fields);
 
 		// Pagination!
-		$this->pagination->initialize(
+		$this->CI->pagination->initialize(
 							array(
 									'base_url'		 => $this->base_url.'/view',
 									'total_rows'	 => $total_rows,
@@ -175,10 +176,10 @@
 						'query'		=> $query,
 						'fields'	=> $fields,
 						'primary'	=> $primary,
-						'paginate'	=> $this->pagination->create_links()
+						'paginate'	=> $this->CI->pagination->create_links()
 					);
 						
-		$this->load->view('view', $data);
+		$this->CI->load->view('view', $data);
 	}
 	
 	// --------------------------------------------------------------------
@@ -194,25 +195,25 @@
 	 */
 	function edit()
 	{
-		if (FALSE === ($id = $this->uri->segment(4)))
+		if (FALSE === ($id = $this->CI->uri->segment(4)))
 		{
 			return $this->view();
 		}
 
 		// Fetch the primary field name
-		$primary = $this->db->primary($this->current_table);				
+		$primary = $this->CI->db->primary($this->current_table);				
 
 		// Run the query
-		$query = $this->db->getwhere($this->current_table, array($primary => $id));
+		$query = $this->CI->db->getwhere($this->current_table, array($primary => $id));
 
 		$data = array(
 						'title'	=>  ( ! isset($this->lang['scaff_edit'])) ? 'Edit Data' : $this->lang['scaff_edit'],
 						'fields'	=> $query->field_data(),
 						'query'		=> $query->row(),
-						'action'	=> $this->base_uri.'/update/'.$this->uri->segment(4)
+						'action'	=> $this->base_uri.'/update/'.$this->CI->uri->segment(4)
 					);
 	
-		$this->load->view('edit', $data);
+		$this->CI->load->view('edit', $data);
 	}
 	
 	// --------------------------------------------------------------------
@@ -226,10 +227,10 @@
 	function update()
 	{	
 		// Fetch the primary key
-		$primary = $this->db->primary($this->current_table);				
+		$primary = $this->CI->db->primary($this->current_table);				
 
 		// Now do the query
-		$this->db->update($this->current_table, $_POST, array($primary => $this->uri->segment(4)));
+		$this->CI->db->update($this->current_table, $_POST, array($primary => $this->CI->uri->segment(4)));
 		
 		redirect($this->base_uri.'/view/');
 	}
@@ -246,21 +247,21 @@
 	{
 		if ( ! isset($this->lang['scaff_del_confirm']))
 		{
-			$message = 'Are you sure you want to delete the following row: '.$this->uri->segment(4);
+			$message = 'Are you sure you want to delete the following row: '.$this->CI->uri->segment(4);
 		}
 		else
 		{
-			$message = $this->lang['scaff_del_confirm'].' '.$this->uri->segment(4);
+			$message = $this->lang['scaff_del_confirm'].' '.$this->CI->uri->segment(4);
 		}
 		
 		$data = array(
 						'title'		=> ( ! isset($this->lang['scaff_delete'])) ? 'Delete Data' : $this->lang['scaff_delete'],
 						'message'	=> $message,
 						'no'		=> anchor(array($this->base_uri, 'view'), ( ! isset($this->lang['scaff_no'])) ? 'No' : $this->lang['scaff_no']),
-						'yes'		=> anchor(array($this->base_uri, 'do_delete', $this->uri->segment(4)), ( ! isset($this->lang['scaff_yes'])) ? 'Yes' : $this->lang['scaff_yes'])
+						'yes'		=> anchor(array($this->base_uri, 'do_delete', $this->CI->uri->segment(4)), ( ! isset($this->lang['scaff_yes'])) ? 'Yes' : $this->lang['scaff_yes'])
 					);
 	
-		$this->load->view('delete', $data);
+		$this->CI->load->view('delete', $data);
 	}
 	
 	// --------------------------------------------------------------------
@@ -274,11 +275,11 @@
 	function do_delete()
 	{		
 		// Fetch the primary key
-		$primary = $this->db->primary($this->current_table);				
+		$primary = $this->CI->db->primary($this->current_table);				
 
 		// Now do the query
-		$this->db->where($primary, $this->uri->segment(4));
-		$this->db->delete($this->current_table);
+		$this->CI->db->where($primary, $this->CI->uri->segment(4));
+		$this->CI->db->delete($this->current_table);
 
 		header("Refresh:0;url=".site_url(array($this->base_uri, 'view')));
 		exit;
